package com.lnkj.jialubao.utils

import cn.jpush.android.api.JPushInterface
import com.blankj.utilcode.util.SPUtils
import com.haoshuang.zhouzhoubang.MyApp
import com.haoshuang.zhouzhoubang.config.Config
import com.haoshuang.zhouzhoubang.model.bean.UserBean
import com.mufeng.libs.utils.ktx.fromJson
import com.mufeng.libs.utils.ktx.mmkv
import com.mufeng.libs.utils.ktx.toJson

object AccountUtils {

    /**
     * 存储用户信息
     */
    var user: UserBean?
        set(value) {
            mmkv(Config.logout_clear).putString(Config.kUser, value.toJson())
        }
        get() {
            val json = mmkv(Config.logout_clear).getString(Config.kUser, "")
            return json?.fromJson()
        }

    /**
     * 存储token
     */
    var token: String
        set(value) {
            mmkv(Config.logout_clear).putString(Config.kToken, value)
        }
        get() = mmkv(Config.logout_clear).getString(Config.kToken, "") ?: ""

    /**
     * 判断用户是否登录
     */
    val isLogin: Boolean
        get() = user != null && token.isNotEmpty()

    /**
     * token过期后, 是否允许跳转到登录页面并退出登录;
     */
    var isTokenErrorJumpLoginPage: Boolean
        set(value) {
            mmkv(Config.logout_clear).putBoolean(Config.kIsTokenErrorJumpLoginPage, value)
        }
        get() = mmkv(Config.logout_clear).getBoolean(Config.kIsTokenErrorJumpLoginPage, true)

    /**
     * 退出登录
     */
    fun logout() {
        JPushInterface.deleteAlias(MyApp.instance, aliasSequence)
        mmkv(Config.logout_clear).clearAll()
        SPUtils.getInstance(Config.logout_clear).clear(true)
    }

    /**
     * 存储别名
     */
    var aliasSequence: Int
        set(value) = SPUtils.getInstance(Config.logout_clear).put("aliasSequence", value)
        get() = SPUtils.getInstance(Config.logout_clear).getInt("aliasSequence")


    /**
     * 是否同意并阅读协议
     */
    var isAgreement: Boolean
        set(value) {
            mmkv().putBoolean(Config.kIsAgreement, value)
        }
        get() = mmkv().getBoolean(Config.kIsAgreement, false)

    /**
     * 是否同意隐私协议弹窗
     */
    var isAgreementDialog: Boolean
        set(value) {
            mmkv().putBoolean(Config.kIsAgreementDialog, value)
        }
        get() = mmkv().getBoolean(Config.kIsAgreementDialog, false)

    /**
     * 是否授权通知权限
     */
    var isAgreeNotification: Boolean
        set(value) {
            mmkv().putBoolean(Config.kIsAgreeNotification, value)
        }
        get() = mmkv().getBoolean(Config.kIsAgreeNotification, false)


    /**
     * 新订单提示音
     */
    var newOrderNotice: String
        set(value) = SPUtils.getInstance(Config.logout_clear).put(Config.kNewOrderNotice, value)
        get() = SPUtils.getInstance(Config.logout_clear)
            .getString(Config.kNewOrderNotice, Config.newOrderNotice)

    /**
     * 指派订单提示音
     */
    var assignOrderNotice: String
        set(value) = SPUtils.getInstance(Config.logout_clear).put(Config.kAssignOrderNotice, value)
        get() = SPUtils.getInstance(Config.logout_clear)
            .getString(Config.kAssignOrderNotice, Config.assignOrderNotice)

    /**
     * 完工订单提示音
     */
    var finishOrderNotice: String
        set(value) = SPUtils.getInstance(Config.logout_clear).put(Config.kFinishOrderNotice, value)
        get() = SPUtils.getInstance(Config.logout_clear)
            .getString(Config.kFinishOrderNotice, Config.finishOrderNotice)

    /**
     * 上门超时订单提示音
     */
    var timeoutOrderNotice: String
        set(value) = SPUtils.getInstance(Config.logout_clear).put(Config.kTimeoutOrderNotice, value)
        get() = SPUtils.getInstance(Config.logout_clear)
            .getString(Config.kTimeoutOrderNotice, Config.timeoutOrderNotice)

    /**
     * 异常订单提示音
     */
    var errorOrderNotice: String
        set(value) = SPUtils.getInstance(Config.logout_clear).put(Config.kErrorOrderNotice, value)
        get() = SPUtils.getInstance(Config.logout_clear)
            .getString(Config.kErrorOrderNotice, Config.errorOrderNotice)

    /**
     * 门店分组展开列表
     */
    var teamGroupShowList: MutableList<String>
        set(value) = SPUtils.getInstance(Config.logout_clear)
            .put("kTeamGroupShowList", value.toJson())
        get() {
            val json = SPUtils.getInstance(Config.logout_clear).getString("kTeamGroupShowList", "")
            if (json.isEmpty()) return mutableListOf()
            return json.fromJson()
        }

    /**
     * 添加门店分组id
     */
    fun addTeamGroupShowList(groupId: String) {
        val list = teamGroupShowList
        if (!list.contains(groupId)) {
            list.add(groupId)
        }
        teamGroupShowList = list
    }

    /**
     * 删除门店分组id
     */
    fun delTeamGroupShowList(groupId: String) {
        val list = teamGroupShowList
        if (list.contains(groupId)) {
            list.remove(groupId)
        }
        teamGroupShowList = list
    }

    /**
     * 首页引导页是否显示
     */
    var homeGuide: Boolean
        set(value) = SPUtils.getInstance(Config.guide).put("homeGuide", value)
        get() = SPUtils.getInstance(Config.guide).getBoolean("homeGuide", false)

    /**
     * 团队设置引导页是否显示
     */
    var teamSetGuide: Boolean
        set(value) = SPUtils.getInstance(Config.guide).put("teamSetGuide", value)
        get() = SPUtils.getInstance(Config.guide).getBoolean("teamSetGuide", false)

    /**
     * 团队成员引导页是否显示
     */
    var inviteMemberGuide: Boolean
        set(value) = SPUtils.getInstance(Config.guide).put("inviteMemberGuide", value)
        get() = SPUtils.getInstance(Config.guide).getBoolean("inviteMemberGuide", false)

    /**
     * 学习第一步引导
     */
    var studyStep1Guide: Boolean
        set(value) = SPUtils.getInstance(Config.guide).put("studyStep1Guide", value)
        get() = SPUtils.getInstance(Config.guide).getBoolean("studyStep1Guide", false)

    /**
     * 学习第二步引导
     */
    var studyStep2Guide: Boolean
        set(value) = SPUtils.getInstance(Config.guide).put("studyStep2Guide", value)
        get() = SPUtils.getInstance(Config.guide).getBoolean("studyStep2Guide", false)

    /**
     * 是否可以提醒验收
     * 距离上一次提醒超过5分钟才能再次提醒
     */
    fun canReminderUserAcceptanceTime(orderId: String): Boolean {
        val time = SPUtils.getInstance().getLong(orderId, 0L)
        return System.currentTimeMillis() - time > 5 * 60 * 1000
    }

    /**
     * 存储订单上一次提醒的时间  5分钟内只能提醒一次
     */
    fun setReminderUserAcceptanceTime(orderId: String) {
        SPUtils.getInstance().put(orderId, System.currentTimeMillis())
    }

    /**
     * 是不是测试环境
     */
    var isTestEnvironment: Boolean
        set(value) = SPUtils.getInstance().put("isTestEnvironment", value)
        get() = SPUtils.getInstance().getBoolean("isTestEnvironment", false)
}